perm filename WINSUB.FAI[VIS,HPM] blob
sn#112696 filedate 1974-07-19 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE WINSUB
C00003 00003 PERUSE: 0
C00007 00004 VARIAN: 0
C00009 00005 CLN: 0
C00010 00006 HIPASS: 0 HI PASS FILTERING
C00013 00007 ***** SAIL INTERFACE ********
C00014 00008
C00016 00009 PASSHI: MOVEM 12,ACS12
C00017 00010 CLEAN: MOVEM 12,ACS12
C00018 ENDMK
C⊗;
TITLE WINSUB
INTERN WIND,HORWIN,VERWIN
ENTRY INIWIN,DOWIN,BSTCOR,CLEAN,PASSHI
EXTERN PICWID,PICLIN,PICHIG,PICBIT,PICWIZ,PICSIZ
EXTERN ROWTAB,COLTAB
WIND: 0
HORWIN: 0
VERWIN: 0
NWIN: 0
WINSIZ: 0
MAXWID←←2000
MAXLIN←←25
STRIP: BLOCK MAXWID
MAPTAB←STRIP+MAXWID/2
STRIP2: BLOCK MAXLIN*MAXWID
A←ARRY2←ARRYO←BESTY←3 ↔ ARRY1←ARRY←CNT2←BESTX←4 ↔ DX1←VW←0
B←T←16 ↔ C←TX←STRP←2 ↔ D←PT←PNT←5 ↔ TY←CNT←6
SUMSQ←E←TXX←HC←7 ↔ PND←DX2←VC←10 ↔ PNC←X1←D1C←11
PNE←Y1←D2C←12 ↔ PN1←X2←CNT1←13
CC←Y2←TOP←14 ↔ DY1←POS←15 ↔ SUM←1 ↔ DL←17
FOR I←-100,-1,1 { I*I
}
SQRS: FOR I←0,100,1 {I*I
}
PERUSE: 0
MOVN T,HORWIN
HRRM T,CV
HRRM T,CV+2
HRRM T,CW
HRRM T,CW+1
ADDI T,1
HRRM T,DV
HRRM T,DV+2
HRRM T,DW
HRRM T,DW+1
ADDI T,1
HRRM T,EV
HRRM T,EV+2
HRRM T,EW
HRRM T,EW+1
MOVN STRP,PICWIZ
IMUL STRP,WIND
SUB STRP,PICWIZ
HRLZ STRP,STRP
HRLZ PNT,PICBIT
LSH PNT,6
ADDI PNT,-1(ARRY)
MOVE CNT,[SUB T,STRIP(POS)]
ADD CNT,PICWIZ
MOVEM CNT,PP
MOVEM CNT,PP0
ADDI CNT,1
MOVEM CNT,PP1
SUBI ARRYO,1
MOVE VW,VERWIN
SETZ SUM,
VERLP: MOVE CNT,STRP
UNPAK: ILDB T,PNT
MOVEM T,STRIP(CNT)
AOBJN CNT,UNPAK
MOVE CNT,HORWIN
SETZB POS,TOP
KLP: SETZB HC,VC
SETZB D1C,D2C
MOVE CNT2,WIND
JLP: MOVE CNT1,WIND
ILP: MOVE T,STRIP(POS)
SUB T,STRIP+1(POS)
ADD HC,SQRS(T)
MOVE T,STRIP(POS)
PP: SUB T,STRIP+1(POS) ;REPLACED BY STRIP+<PICWID>(POS)
ADD VC,SQRS(T)
MOVE T,STRIP(POS)
PP1: SUB T,STRIP+1(POS) ;REPLACED BY STRIP +<PICWID>+1
ADD D1C,SQRS(T)
MOVE T,STRIP+1(POS)
PP0: SUB T,STRIP+1(POS) ;REPLACED BY STRIP+<PICWID>
ADD D2C,SQRS(T)
ADD POS,PICWIZ
SOJG CNT1,ILP
AOS POS,TOP
SOJG CNT2,JLP
CAMLE HC,VC
MOVE HC,VC
CAMLE HC,D1C
MOVE HC,D1C
CAMLE HC,D2C
MOVE HC,D2C
ADD SUM,HC
TRZ HC,1 ;THE LOCAL MAXIMUM TEST
MOVEI T,1
CAMGE HC,(ARRYO)
AOJA HC,CW
ORM T,(ARRYO)
CV: CAMGE HC,HORWIN(ARRYO) ;R HALF BECOMES -<HORWIN>
AOJA HC,DW
ORM T,HORWIN(ARRYO) ;BECOMES -<HORWIN>(ARRYO)
DV: CAMGE HC,1+HORWIN(ARRYO) ;BECOMES 1-<HORWIN>
AOJA HC,EW
ORM T,1+HORWIN(ARRYO) ;1-<HORWIN>
EV: CAMGE HC,2+HORWIN(ARRYO) ;2-<HORWIN>
AOJA HC,LOOF
ORM T,2+HORWIN(ARRYO) ;2-<HORWIN>
JRST LOOF
CW: CAMLE HC,HORWIN(ARRYO) ;-<HORWIN>
ORM T,HORWIN(ARRYO) ;-<HORWIN>
DW: CAMLE HC,1+HORWIN(ARRYO) ;1-<HORWIN>
ORM T,1+HORWIN(ARRYO) ;1-<HORWIN>
EW: CAMLE HC,2+HORWIN(ARRYO) ;2-<HORWIN>
ORM T,2+HORWIN(ARRYO) ;2-<HORWIN>
LOOF: PUSH ARRYO,HC
SOJG CNT,KLP
SUB PNT,PICLIN
SOJG VW,VERLP
JRST @PERUSE
VARIAN: 0
SCANS: 0
SETZ TX,
SETZB SUM,SUMSQ
MOVE TY,Y1
LY1: MOVE PT,ARRY1
ADD PT,ROWTAB-1(TY)
ADD PT,COLTAB-2(X1)
HLL TX,X1
LX1: ILDB T,PT
ADD SUM,T
ADD SUMSQ,SQRS(T)
MOVEM T,STRIP(TX)
AOBJN TX,LX1
AOBJN TY,LY1
IMUL SUM,SUM
IDIV SUM,DX1
IDIV SUM,DY1
SUB SUMSQ,SUM
MOVEM SUMSQ,VARIAN
MOVE TY,Y2
SETZ TX,
LY2: MOVE PT,ARRY2
ADD PT,ROWTAB-1(TY)
ADD PT,COLTAB-2(X2)
HLL TX,X2
LX2: ILDB T,PT
MOVEM T,STRIP2(TX)
AOBJN TX,LX2
AOBJN TY,LY2
HLLZ X1,X1
HLLZ Y1,Y1
HLLZ X2,X2
HLLZ Y2,Y2
SUB X2,X1
SUB X2,[1,,0]
SUB Y2,Y1
SUB Y2,[1,,0]
MOVE DL,DX2
SUB DL,DX1
HRLZI SUM,377777
SETZ BESTY,
SETZ TXX,
SCY: HLL TXX,X2
SCX: SETZB TX,BESTX
MOVEI T,STRIP2(TXX)
HRRM T,SCAX
MOVE TY,Y1
SCAY: HLL TX,X1
SCAX: MOVE T,STRIP2(TX)
SUB T,STRIP(TX)
ADD BESTX,SQRS(T)
AOBJN TX,SCAX
ADDM DL,SCAX
AOBJN TY,SCAY
CAML BESTX,SUM
JRST .+3
BTST: MOVE SUM,BESTX
HRRZ BESTY,TXX
AOBJN TXX,SCX
ADD TXX,DX1
AOBJN Y2,SCY
IDIV BESTY,DX2
ASH SUM,4
IDIV SUM,VARIAN
JRST @SCANS
CLN: 0
MOVE CNT,PICWIZ
SUBI CNT,2
MOVE A,PICHIG
SUBI A,2
IMUL CNT,A
HRLZ PND,PICBIT
LSH PND,6
ADDI PND,-1(ARRY)
MOVE PNC,PND
ADD PNC,PICLIN
ILDB B,PNC
MOVE PNE,PNC
ADD PNE,PICLIN
ILDB A,PNC
MOVE PN1,PNC
ILDB CC,PNC
IBP PND
ILDB D,PND
ILDB E,PNE
WOOP: MOVE C,CC
CAMLE B,C
EXCH B,C
CAMLE D,E
EXCH D,E
CAMLE B,D
EXCH B,D
CAMLE C,E
EXCH C,E
CAMLE C,D
EXCH C,D
CAMLE A,D
DPB D,PN1
CAMGE A,C
DPB C,PN1
MOVE PN1,PNC
MOVE B,A
MOVE A,CC
ILDB CC,PNC
ILDB D,PND
ILDB E,PNE
SOJG CNT,WOOP
JRST @CLN
HIPASS: 0 ;HI PASS FILTERING
MOVEI E,1
ASH E,@PICBIT
MOVE C,E
ASH C,1
SUBI E,1
MOVE CNT,E
HRRM CNT,TABTS
HRRM CNT,TABTS+1
ASH CNT,-1
HRRM CNT,TABL
MOVN E,E
TABL: HRREI VW,100(E)
CAIGE VW,0
MOVEI VW,0
TABTS: CAILE VW,77
MOVEI VW,77
MOVEM VW,MAPTAB(E)
ADDI E,1
SOJG C,TABL
BRK: HRL E,ARRY1
HRR E,ARRY2
MOVE C,ARRY2
ADD C,PICSIZ
SUBI C,1
BLT E,(C)
MOVN CNT,PICWIZ
HRLZ CNT,CNT
HRLZ PNT,PICBIT
LSH PNT,6
ADDI PNT,-1(ARRY)
MOVE PN1,PNT
MOVE B,CNT
CL: ILDB VW,PNT
MOVEM VW,STRIP2(B)
AOBJN B,CL
MOVE E,WIND
SOJLE E,NADD
CN: MOVE B,CNT
CM: ILDB VW,PNT
ADDM VW,STRIP2(B)
AOBJN B,CM
SOJG E,CN
NADD: MOVE DL,WIND
ASH DL,-1
ADD ARRY2,COLTAB-1(DL)
ADD ARRY2,ROWTAB-1(DL)
MOVE C,WIND
SUB C,PICWIZ
HRLZ C,C
MOVEI VW,STRIP2
ADD VW,WIND
HRRM VW,SUMST
MOVE E,PICHIG
SUB E,WIND
CR: SETZ SUM,
MOVE B,WIND
CO: ADD SUM,STRIP2-1(B)
SOJG B,CO
MOVE B,C
MOVE PND,PICLIN
ADDB PND,ARRY2
CP: MOVE CC,WINSIZ
IDIVM SUM,CC
ILDB DY1,PND
SHFST: SUB DY1,CC
MOVE DY1,MAPTAB(DY1)
DPB DY1,PND
SUB SUM,STRIP2(B)
SUMST: ADD SUM,STRIP2(B) ;CHANGED TO STRIP+<WIND>
AOBJN B,CP
MOVE B,CNT
CQ: ILDB CC,PN1
ILDB VW,PNT
SUB VW,CC
ADDM VW,STRIP2(B)
AOBJN B,CQ
SOJGE E,CR
JRST @HIPASS
;***** SAIL INTERFACE ********
P←17
ACS12: 0
ACS16: 0
ACS17: 0
RETAD: 0
INIWIN: POP P,RETAD
POP P,WIND
MOVE 1,PICWID
SUBI 1,1
IDIV 1,WIND
MOVEM 1,HORWIN
MOVE 1,PICHIG
SUBI 1,1
IDIV 1,WIND
MOVEM 1,VERWIN
IMUL 1,HORWIN
MOVEM 1,NWIN
MOVE 1,WIND
IMUL 1,1
MOVEM 1,WINSIZ
JRST @RETAD
DOWIN: MOVEM 12,ACS12
MOVEM 16,ACS16
POP P,RETAD
POP P,ARRYO
POP P,ARRY
MOVEM 17,ACS17
JSR PERUSE
MOVE 12,ACS12
MOVE 16,ACS16
MOVE 17,ACS17
IDIV SUM,NWIN
JRST @RETAD
DAX1: 0
DAY1: 0
DAX2: 0
DAY2: 0
BSTCOR: MOVEM 12,ACS12
MOVEM 16,ACS16
POP P,RETAD
POP P,DAY2
POP P,DAX2
POP P,DAY1
POP P,DAX1
POP P,ARRY2
POP P,Y1
POP P,X1
POP P,T
SUBI Y1,-1(T)
HRRE DY1,Y1
MOVN Y1,Y1
HRLZ Y1,Y1
HRR Y1,T
POP P,T
SUBI X1,-1(T)
HRRE DX1,X1
MOVN X1,X1
HRLZ X1,X1
HRR X1,T
POP P,ARRY1
MOVE Y2,@DAY2
MOVE T,@DAY1
SUBI Y2,-1(T)
MOVN Y2,Y2
HRLZ Y2,Y2
HRR Y2,T
MOVE X2,@DAX2
MOVE T,@DAX1
SUBI X2,-1(T)
HRRE DX2,X2
MOVN X2,X2
HRLZ X2,X2
HRR X2,T
MOVEM 17,ACS17
JSR SCANS
DIVTT: ADDB BESTX,@DAX1
ADD BESTX,DX1
SUBI BESTX,1
MOVEM BESTX,@DAX2
ADDB BESTY,@DAY1
ADD BESTY,DY1
SUBI BESTY,1
MOVEM BESTY,@DAY2
MOVE 12,ACS12
MOVE 16,ACS16
MOVE 17,ACS17
JRST @RETAD
PASSHI: MOVEM 12,ACS12
MOVEM 16,ACS16
POP P,RETAD
POP P,ARRY2
POP P,ARRY1
MOVEM 17,ACS17
JSR HIPASS
MOVE 17,ACS17
MOVE 16,ACS16
MOVE 12,ACS12
JRST @RETAD
CLEAN: MOVEM 12,ACS12
MOVEM 16,ACS16
POP P,RETAD
POP P,ARRY
MOVEM 17,ACS17
JSR CLN
MOVE 12,ACS12
MOVE 16,ACS16
MOVE 17,ACS17
JRST @RETAD
END